#include <windows.h>
#include <iostream>
#include <map>
#include "registry.h"
using namespace std;

namespace Puhelinluettelo
{
	/**
	* Rekisteri luokan funktioiden toteutukset 
	*/
	Rekisteri::Rekisteri()
	{
		LPCTSTR sKey = TEXT("Software\\Puhelinluettelo");
		RegOpenKeyEx(HKEY_CURRENT_USER, sKey, 0, KEY_ALL_ACCESS, &hKey);
	}

	Rekisteri::~Rekisteri()
	{
		RegCloseKey(hKey);
	}

	void Rekisteri::kirjoita(const std::string &avain, const std::string &arvo)
	{
		RegSetValueExA(hKey, avain.c_str(), 0, REG_SZ, reinterpret_cast<const BYTE *>(arvo.c_str()), arvo.size());
	}

	void Rekisteri::poista(const std::string &avain)
	{
		RegDeleteValueA(hKey, avain.c_str());
	}

	std::string Rekisteri::lue(const std::string &avain)
	{
		DWORD type = REG_SZ;
		BYTE jono[256];
		DWORD lpcbData;
		
		if(RegQueryValueExA(hKey, avain.c_str(), 0, &type, jono, &lpcbData) != ERROR_SUCCESS)
			return "";
		return reinterpret_cast<const char *>(jono);
	}

	map<string, string> *Rekisteri::lueKaikki()
	{
		int index = 0;
		DWORD size = 2048;
		char buf[2048];
		LONG ret;
		map<string, string> *kartta = new map<string, string>();
		do {
			ret = RegEnumValueA(hKey, index, buf, &size, 0, 0, 0, 0);
			(*kartta)[buf] = lue(string(buf));
			index++;
		} while(ret != ERROR_NO_MORE_ITEMS);

		return kartta;
	}
}
